import matplotlib.pyplot as plt  # 引入matplotlib.pyplot模块用于绘图
from pathlib import Path  # 引入Path类用于处理文件路径
from matplotlib.pyplot import show  # 引入show函数用于显示绘制的图形

from src.config.config import Config  # 从src.config.config模块引入Config类，用于读取配置
from src.config.config_plotting import PlotConfig  # 从src.config.config_plotting模块引入PlotConfig类，用于绘图配置
from src.plotting.plot_error_sweep_testing_graph import plot_error_sweep_testing_graph  # 从src.plotting.plot_error_sweep_testing_graph模块引入plot_error_sweep_testing_graph函数，用于绘制误差扫描图

if __name__ == '__main__':  # 确保只有在直接运行脚本时才执行以下代码

    cfg = Config()  # 创建Config类的实例，用于加载配置信息
    plot_cfg = PlotConfig()  # 创建PlotConfig类的实例，用于加载绘图配置信息

    plt.rc('font', family='sans-serif')  # 设置字体为无衬线字体，以确保绘图时标签文字的样式一致

    # 定义数据文件路径列表
    data_paths = [
        Path(cfg.output_metrics_path,  # 输出度量路径
             'sat_2_ant_4_usr_3_satdist_10000_usrdist_1000', 'err_mult_on_steering_cos', 'error_sweep',  # 数据文件所在的目录结构
             'testing_mmse_sweep_0.0_0.5_userwiggle_30.gzip'),  # 数据文件名
        Path(cfg.output_metrics_path,
             'sat_2_ant_4_usr_3_satdist_10000_usrdist_1000', 'err_mult_on_steering_cos', 'error_sweep',
             'testing_mrc_sweep_0.0_0.5_userwiggle_30.gzip'),
        Path(cfg.output_metrics_path,
             'sat_2_ant_4_usr_3_satdist_10000_usrdist_1000', 'err_mult_on_steering_cos', 'error_sweep',
             'testing_sac_error_0.0_userwiggle_30_snap_3.580_sweep_0.0_0.5_userwiggle_30.gzip'),
        Path(cfg.output_metrics_path,
             'sat_2_ant_4_usr_3_satdist_10000_usrdist_1000', 'err_mult_on_steering_cos', 'error_sweep',
             'testing_sac_error_0.1_userwiggle_30_snap_3.422_sweep_0.0_0.5_userwiggle_30.gzip'),
    ]

    # 设置图形的宽度和高度
    plot_width = 0.99 * 2.67  # 图形宽度为2.67的99%
    plot_height = plot_width * 2/3  # 图形高度为宽度的2/3

    # 定义图例标签、标记样式、颜色和线型
    plot_legend = ['MMSE', 'OMA', 'SAC1', 'SAC2']  # 图例标签，表示不同的数据系列
    plot_markerstyle = ['o', '^', 's', 'x']  # 标记样式，分别为圆圈、三角形、方形和叉号
    plot_colors = [plot_cfg.cp2['blue'], plot_cfg.cp2['black'], plot_cfg.cp2['magenta'], plot_cfg.cp2['green']]  # 图形颜色，分别为蓝色、黑色、品红色和绿色
    plot_linestyles = ['-', '--', '-', '-']  # 线型，分别为实线、虚线、实线和实线

    # 调用自定义绘图函数，生成误差扫描测试图
    plot_error_sweep_testing_graph(
        paths=data_paths,  # 数据文件路径
        name='error_sweep_model_1_presentation',  # 图形名称
        width=plot_width,  # 图形宽度
        height=plot_height,  # 图形高度
        xlabel='User Position Error Bound \( \Delta\\varepsilon \)',  # X轴标签，表示用户位置误差界限
        ylabel='Sum Rate \( \hat{R} \) [bps/Hz]',  # Y轴标签，表示总速率
        legend=plot_legend,  # 图例标签
        colors=plot_colors,  # 图形颜色
        markerstyle=plot_markerstyle,  # 标记样式
        linestyles=plot_linestyles,  # 线型
        plots_parent_path=plot_cfg.plots_parent_path,  # 图形保存路径
    )
    
    show()  # 显示绘制的图形
